/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.ufrn.engcomp.pds.helloopc.controle;

import br.ufrn.engcomp.pds.helloopc.modelo.dominio.Controlador;
import br.ufrn.engcomp.pds.helloopc.modelo.dominio.IEntidade;
import br.ufrn.engcomp.pds.helloopc.modelo.dominio.ParametroConfiguracao;
import br.ufrn.engcomp.pds.helloopc.modelo.dominio.ServidorOPC;
import br.ufrn.engcomp.pds.helloopc.modelo.dominio.TagOPC;
import br.ufrn.engcomp.pds.helloopc.modelo.dominio.VariavelControlador;
import br.ufrn.engcomp.pds.helloopc.modelo.negocio.CadastrarControladorNegocio;
import br.ufrn.engcomp.pds.helloopc.modelo.negocio.excecao.NegocioException;
import br.ufrn.engcomp.pds.helloopc.visao.excecao.VisaoException;
import java.util.List;

/**
 *
 * @author Felipe Rivas
 */
public class CadastrarControladorController implements ICadastroController<Controlador> {

    private CadastrarControladorNegocio negocio = new CadastrarControladorNegocio();

    @Override
    public void inserir(Controlador controlador) throws VisaoException {
        try {
            negocio.inserir(controlador);
        } catch (NegocioException nex) {
            throw new VisaoException("Erro ao inserir controlador, motivo; " + nex.getMessage());
        }
    }

    @Override
    public void atualizar(Controlador controlador) throws VisaoException {
        try {
            negocio.atualizar(controlador);
        } catch (NegocioException nex) {
            throw new VisaoException("Erro ao atualizar controlador, motivo; " + nex.getMessage());
        }
    }

    @Override
    public void remover(Object id) {
        negocio.remover(id);
    }

    @Override
    public Controlador buscarPorId(Object id) {
        return negocio.buscarControlador(id);
    }

    @Override
    public List<Controlador> listar() {
        return negocio.listarControladores();
    }

    public List<TagOPC> listarTagsOPC() throws VisaoException {
        try {
            return negocio.listarTagsOPC();
        } catch (NegocioException nex) {
            throw new VisaoException("Não foi possível listar as tags do servidor OPC.");
        }
    }

    public List<ParametroConfiguracao> sincronizarParametros(Controlador entidade) {
        return negocio.sincronizarParametros(entidade);
    }

    public List<VariavelControlador> sincronizarVariaveis(Controlador entidade) {
        return negocio.sincronizarVariaveis(entidade);
    }

    public ServidorOPC getServidorConectado() throws VisaoException {
        try {
            return negocio.getServidorConectado();
        } catch(NegocioException nex) {
            throw new VisaoException(nex.getMessage());
        }
    }

    public ServidorOPC sincronizarServidorOPC(ServidorOPC servidorOPC) {
        return negocio.sincronizarServidorOPC(servidorOPC);
    }

}
